package com.terran4j.kotlin.flow

// 相当于 java 的 switch，但比 switch 要强大得多。
// 参见 java 的 DoSwitch 类。

// 可以用于基本数值类型。
fun aboutWhen(status:Int) {
    when (status) {
        1 -> println("status = 1")
        2 -> {
            println("status = 2")
        }
        else -> {
            println("status = $status")
        }
    }
}

// 可以用于对象的判断。
data class User(val name: String)

fun aboutWhenWithClass(user: User) {
    when (user) {
        User("Neo") -> println("The user is Neo")
        User("Kate") -> {
            println("The user is Kate")
        }
        else -> {
            println("The user is unknown: $user")
        }
    }
}

// 可以用“使用区间”判断。
fun aboutWhenWithIn(x:Int) {
    when (x) {
        in 1..10 -> println("x in 1..10")
        !in 1..10 -> {
            println("x NOT in 1..10")
        }
        else -> {
            println("x = $x")
        }
    }
}

// 可以用一个方法来判断。
fun square(n: Int) = n * n

fun aboutWhenWithMethod(x:Int) {
    when (x) {
        square(x) -> println("x = x's square")
        else -> {
            println("x = $x")
        }
    }
}